package com.company.AtomicOption;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 作者  Administrator
 * 时间  2017/6/2 9:48
 * 文件  ThreadPoolsDemo
 * 描述  线程安全的值对象
 * 1. 原则操作
 */
public class ValueObject {
	/**
	* 原子变量
	* */
	static class AtomValueObj{
		//多个线程操作一个count变量 将这个变量定义为原子类型
		private AtomicInteger count = new AtomicInteger();

		public int getCount(){
			return count.get();
		}

		/**
		 * Atomically increments by one the current value.
		 */
		public void increment(){
			System.out.println("执行后的结果："+count.incrementAndGet());
		}
	}
	/**
	 * 普通原子变量
	 * */
	static class NormalValueObj{
		//多个线程操作一个count变量 普通类型
		private int count;

		public int getCount(){
			return count;
		}

		/**
		 * Atomically increments by one the current value.
		 */
		public void increment(){
			System.out.println("执行后的结果："+count++);
		}
	}
	/**
	 * volatile 修饰的变量并不具备原子性
	 * 并发会出现问题的
	 * 要想保证一致性 需要加synchronized 同步
	 * */
	static class VolatileCounter {
		private volatile int count;

		public int getCount(){
			return count;
		}
		public void increment(){
			System.out.println("执行后的结果："+count++);
		}
	/*	public synchronized void increment(){
			count++;
		}*/
	}
}
